namespace CSharpPro._1016;

public class Demo
{
   public void TestPrint1()
   {
      Console.WriteLine("请输入第一个数");
      int x = int.Parse(Console.ReadLine());
      Console.WriteLine("请输入第二个数");
      int y = int.Parse(Console.ReadLine());
      Console.WriteLine("请输入第三个数");
      int z = int.Parse(Console.ReadLine());
      int c = 0;
      if (x < y)
      {
         c = y;
         y = x;
         x = c;
         if (x < z)
         {
            c = x;
            x = z;
            z = y;
            y = c;

         }
      }
      else
      {
         if (x < z)
         {
            c = x;
            x = z;
            z = y;
            y = c;
         }
      }

      Console.WriteLine("从小到大排序后的结果为：");
      Console.WriteLine($"{x} {y} {z}");
   }



   public void TestPrint2()
   {
      int sum = 0;
      Console.WriteLine("1-100之间所有不是7的倍数且不包含7的数字：");

      for (int i = 1; i <= 100; i++)
      {
         // 检查是否是7的倍数
         bool isMultipleOf7 = i % 7 == 0;

         // 检查是否包含数字7（个位或十位是7）
         bool contains7 = (i % 10 == 7) || (i / 10 == 7);

         // 如果既不是7的倍数也不包含7，则输出并累加
         if (!isMultipleOf7 && !contains7)
         {
            Console.Write(i + " ");
            sum += i;
         }
      }

      // 输出总和
      Console.WriteLine("\n\n这些数字的总和是：" + sum);
   }


   public void TestPrint3()
   {
      Console.WriteLine("九九乘法表：");
      Console.WriteLine("---------------------------");

      // 外层循环控制行数（乘数）
      for (int i = 1; i <= 9; i++)
      {
         // 内层循环控制每行的列数（被乘数）
         for (int j = 1; j <= i; j++)
         {
            // 格式化输出，确保对齐
            Console.Write($"{j}×{i}={i * j}\t");
         }

         // 每行结束后换行
         Console.WriteLine();
      }

      Console.WriteLine("---------------------------");
   }

   public void TestPrint4()
   {
      Console.WriteLine("1000以内的完数有：");
        
      // 遍历1到1000的所有数
      for (int i = 2; i <= 1000; i++)
      {
         // 获取当前数的所有真因子
         List<int> factors = GetProperFactors(i);
            
         // 计算真因子之和
         int sum = 0;
         foreach (int factor in factors)
         {
            sum += factor;
         }
            
         // 判断是否为完数
         if (sum == i)
         {
            Console.Write(i + " (因子：");
            Console.Write(string.Join(" + ", factors));
            Console.WriteLine(" = " + i + ")");
         }
      }
   }
    
   // 获取一个数的所有真因子（除自身外的所有因数）
   static List<int> GetProperFactors(int number)
   {
      List<int> factors = new List<int>();
        
      // 1是所有数的真因子（除了1本身）
      if (number > 1)
      {
         factors.Add(1);
      }
        
      // 寻找其他真因子
      for (int i = 2; i <= number / 2; i++)
      {
         if (number % i == 0)
         {
            factors.Add(i);
         }
      }
        
      return factors;
   }


   public void TestPrint5()
   {
      
      try
      {
         // 接收用户输入
         Console.Write("请输入一个正整数：");
         int number = int.Parse(Console.ReadLine());
            
         // 验证输入是否为正整数
         if (number <= 0)
         {
            Console.WriteLine("请输入正整数！");
            return;
         }
            
         // 计算位数并逆序打印
         AnalyzeNumber(number);
      }
      catch (FormatException)
      {
         Console.WriteLine("输入格式错误，请输入有效的整数！");
      }
      catch (OverflowException)
      {
         Console.WriteLine("输入的数字过大，请输入较小的整数！");
      }
   }
    
   static void AnalyzeNumber(int number)
   {
      int originalNumber = number;
      int digitCount = 0;
      string reversedDigits = "";
        
      // 计算位数并拼接逆序数字
      while (number > 0)
      {
         // 获取最后一位数字
         int digit = number % 10;
         reversedDigits += digit + " ";
            
         // 移除最后一位数字
         number = number / 10;
            
         // 计数加1
         digitCount++;
      }
        
      // 输出结果
      Console.WriteLine($"{originalNumber} 是 {digitCount} 位数");
      Console.WriteLine("逆序打印各位位数字：" + reversedDigits.Trim());
   }


   public void TestPrint6()
   {
      static void Main()
      {
         Console.Write("输入菱形行数(正奇数)：");
         int n = int.Parse(Console.ReadLine());
        
         if (n <= 0 || n % 2 == 0)
         {
            Console.WriteLine("请输入正奇数！");
            return;
         }

         int mid = n / 2;
        
         // 上半部分（含中间行）
         for (int i = 0; i <= mid; i++)
         {
            Console.WriteLine(new string(' ', mid - i) + new string('*', 2 * i + 1));
         }
        
         // 下半部分
         for (int i = mid - 1; i >= 0; i--)
         {
            Console.WriteLine(new string(' ', mid - i) + new string('*', 2 * i + 1));
         }
      }
   }
}
   
   


     
   
    
   